#include "MephistoCAM.h"

#ifndef _MEPHISTOCAM_SOCKET_H_
#define _MEPHISTOCAM_SOCKET_H_

// #define REG_NUM CCD290_DRV_CONFIG_PARAM_NUM

typedef struct _MephistoCAM_Config{

    AD9508_Config       *config_ad9508;

    ADC2REG_CLK_CONFIG  *config_adc2reg_clk;

    ADS5294_Config      *config_ads5294;

    ccd290_drive_config *config_ccd_drive;

    DAISY_Config        *config_daisy;

    DACx0508_Config     *config_dacx0508;

    char dcds_config_file[1024];     // 记录DCDS参数配置文件

    int n_bytes;        // 图像保存至DDR时，每个像元占的字节数

} MephistoCAM_Config;


int init_MephistoCAM_Config( MephistoCAM_Config *cfg, char *config_path );
int free_MephistoCAM_Config( MephistoCAM_Config *cfg );

int socket_power_up(    MephistoCAM_Config *cfg, 
                        uint32_t *gpio_flt_ctrl, 
                        uint32_t *gpio_flt_data,
                        uint32_t *gpio_in,
                        uint32_t *gpio_pl_ps,
                        uint32_t *gpio_out,
                        uint32_t *gpio_out2,
                        uint32_t *gpio_spi_ps_ctrl,
                        uint32_t *gpio_spi_ps_data );

int socket_config_ad9508(   MephistoCAM_Config *cfg, 
                            uint32_t *gpio_flt_ctrl, 
                            uint32_t *gpio_flt_data,
                            uint32_t *gpio_in,
                            uint32_t *gpio_pl_ps,
                            uint32_t *gpio_out,
                            uint32_t *gpio_out2,
                            uint32_t *gpio_spi_ps_ctrl,
                            uint32_t *gpio_spi_ps_data );

int socket_config_adc2reg_clk(  MephistoCAM_Config *cfg, 
                                uint32_t *gpio_flt_ctrl, 
                                uint32_t *gpio_flt_data,
                                uint32_t *gpio_in,
                                uint32_t *gpio_pl_ps,
                                uint32_t *gpio_out,
                                uint32_t *gpio_out2,
                                uint32_t *gpio_spi_ps_ctrl,
                                uint32_t *gpio_spi_ps_data );

int socket_config_ads5294(  MephistoCAM_Config *cfg, 
                            uint32_t *gpio_flt_ctrl, 
                            uint32_t *gpio_flt_data,
                            uint32_t *gpio_in,
                            uint32_t *gpio_pl_ps,
                            uint32_t *gpio_out,
                            uint32_t *gpio_out2,
                            uint32_t *gpio_spi_ps_ctrl,
                            uint32_t *gpio_spi_ps_data );

int socket_config_ccd_drive(MephistoCAM_Config *cfg, 
                            uint32_t *gpio_flt_ctrl, 
                            uint32_t *gpio_flt_data,
                            uint32_t *gpio_in,
                            uint32_t *gpio_pl_ps,
                            uint32_t *gpio_out,
                            uint32_t *gpio_out2,
                            uint32_t *gpio_spi_ps_ctrl,
                            uint32_t *gpio_spi_ps_data );

int socket_config_daisy(MephistoCAM_Config *cfg, 
                        uint32_t *gpio_flt_ctrl, 
                        uint32_t *gpio_flt_data,
                        uint32_t *gpio_in,
                        uint32_t *gpio_pl_ps,
                        uint32_t *gpio_out,
                        uint32_t *gpio_out2,
                        uint32_t *gpio_spi_ps_ctrl,
                        uint32_t *gpio_spi_ps_data,
                        int mode );

int socket_config_dacx0508( MephistoCAM_Config *cfg, 
                            uint32_t *gpio_flt_ctrl, 
                            uint32_t *gpio_flt_data,
                            uint32_t *gpio_in,
                            uint32_t *gpio_pl_ps,
                            uint32_t *gpio_out,
                            uint32_t *gpio_out2,
                            uint32_t *gpio_spi_ps_ctrl,
                            uint32_t *gpio_spi_ps_data,
                            int mode );

int socket_config_dcds( MephistoCAM_Config *cfg, 
                        uint32_t *gpio_flt_ctrl, 
                        uint32_t *gpio_flt_data,
                        uint32_t *gpio_in,
                        uint32_t *gpio_pl_ps,
                        uint32_t *gpio_out,
                        uint32_t *gpio_out2,
                        uint32_t *gpio_spi_ps_ctrl,
                        uint32_t *gpio_spi_ps_data );

int socket_power_down(  MephistoCAM_Config *cfg, 
                        uint32_t *gpio_flt_ctrl, 
                        uint32_t *gpio_flt_data,
                        uint32_t *gpio_in,
                        uint32_t *gpio_pl_ps,
                        uint32_t *gpio_out,
                        uint32_t *gpio_out2,
                        uint32_t *gpio_spi_ps_ctrl,
                        uint32_t *gpio_spi_ps_data );

int socket_reset_ads5294(   MephistoCAM_Config *cfg, 
                            uint32_t *gpio_flt_ctrl, 
                            uint32_t *gpio_flt_data,
                            uint32_t *gpio_in,
                            uint32_t *gpio_pl_ps,
                            uint32_t *gpio_out,
                            uint32_t *gpio_out2,
                            uint32_t *gpio_spi_ps_ctrl,
                            uint32_t *gpio_spi_ps_data);

int socket_sync_ads5294(    MephistoCAM_Config *cfg, 
                            uint32_t *gpio_flt_ctrl, 
                            uint32_t *gpio_flt_data,
                            uint32_t *gpio_in,
                            uint32_t *gpio_pl_ps,
                            uint32_t *gpio_out,
                            uint32_t *gpio_out2,
                            uint32_t *gpio_spi_ps_ctrl,
                            uint32_t *gpio_spi_ps_data);

int socket_set_156MHz_clk(  MephistoCAM_Config *cfg, 
                            uint32_t *gpio_flt_ctrl, 
                            uint32_t *gpio_flt_data,
                            uint32_t *gpio_in,
                            uint32_t *gpio_pl_ps,
                            uint32_t *gpio_out,
                            uint32_t *gpio_out2,
                            uint32_t *gpio_spi_ps_ctrl,
                            uint32_t *gpio_spi_ps_data, 
                            int opt );

int socket_set_afe( MephistoCAM_Config *cfg, 
                    uint32_t *gpio_flt_ctrl, 
                    uint32_t *gpio_flt_data,
                    uint32_t *gpio_in,
                    uint32_t *gpio_pl_ps,
                    uint32_t *gpio_out,
                    uint32_t *gpio_out2,
                    uint32_t *gpio_spi_ps_ctrl,
                    uint32_t *gpio_spi_ps_data, 
                    int opt);


int socket_readout( MephistoCAM_Config *cfg, 
                    uint32_t *gpio_flt_ctrl, 
                    uint32_t *gpio_flt_data,
                    uint32_t *gpio_in,
                    uint32_t *gpio_pl_ps,
                    uint32_t *gpio_out,
                    uint32_t *gpio_out2,
                    uint32_t *gpio_spi_ps_ctrl,
                    uint32_t *gpio_spi_ps_data );

int socket_refresh( MephistoCAM_Config *cfg, 
                    uint32_t *gpio_flt_ctrl, 
                    uint32_t *gpio_flt_data,
                    uint32_t *gpio_in,
                    uint32_t *gpio_pl_ps,
                    uint32_t *gpio_out,
                    uint32_t *gpio_out2,
                    uint32_t *gpio_spi_ps_ctrl,
                    uint32_t *gpio_spi_ps_data );

int socket_exposure( MephistoCAM_Config *cfg, 
                    uint32_t *gpio_flt_ctrl, 
                    uint32_t *gpio_flt_data,
                    uint32_t *gpio_in,
                    uint32_t *gpio_pl_ps,
                    uint32_t *gpio_out,
                    uint32_t *gpio_out2,
                    uint32_t *gpio_spi_ps_ctrl,
                    uint32_t *gpio_spi_ps_data );



int socket_set_wkdir();
int socket_open_log();
int socket_close_log();

#endif
